要在 Python 中執行線性回歸,主要有以下幾個熱門函式庫:
statsmodels.api.OLS()
函數,專為統計分析設計,提供詳盡的統計結果,如 R-squared、t-統計量等。sklearn.linear_model.LinearRegression()
類別,是機器學習領域的首選,介面簡潔,易於整合到機器學習流程中。numpy.polyfit()
函數(設定 degree=1
)進行簡單的線性擬合。在我們深入資產定價模型的數學理論前,先來看看交易員如何在技術分析中使用回歸工具。
回歸通道是由三條線組成的技術指標,用於描繪價格趨勢及其波動範圍。
以下程式碼使用 yfinance
取得 NVIDIA (NVDA) 的股價,並同時繪製布林通道與回歸通道。
import pandas as pd
import yfinance as yf
import mplfinance as mpf
import pandas_ta as ta
import numpy as np
# 1. 取得 NVIDIA 股價資料
start_date = "2020-08-01"
end_date = "2021-01-01"
stock_symbol = "NVDA"
data = yf.download(stock_symbol, start=start_date, end=end_date)
# 2. 計算布林通道 (長度為 20)
data.ta.bbands(close='Close', length=20, append=True)
# 3. 計算回歸通道
x = np.array(range(len(data)))
y = data['Close'].values
slope, intercept = np.polyfit(x, y, 1)
data['Regression'] = slope * x + intercept
# 計算殘差的標準差
residuals = y - data['Regression']
std_error = np.std(residuals)
# 計算上下通道線
data['Upper Regression'] = data['Regression'] + (2 * std_error)
data['Lower Regression'] = data['Regression'] - (2 * std_error)
# 4. 繪製 K 線圖、布林通道與回歸通道
ap = [
mpf.make_addplot(data['BBL_20_2.0'].values, color='cyan', label='Lower Bollinger Band'),
mpf.make_addplot(data['BBU_20_2.0'].values, color='cyan', label='Upper Bollinger Band'),
mpf.make_addplot(data['Lower Regression'].values, color='orange', label='Lower Regression Channel'),
mpf.make_addplot(data['Regression'].values, color='red', label='Mid Regression Channel'),
mpf.make_addplot(data['Upper Regression'].values, color='orange', label='Upper Regression Channel')
]
mpf.plot(data, type='candle', style='charles', title=f"{stock_symbol} Candlestick Chart",
ylabel='Stock Price', addplot=ap, volume=True, figsize=(15,10))
LRI 繪製的是特定週期(例如 20 天)線性回歸線的終點值,用來預測價格的期望位置。相較於移動平均線 (Moving Average) 僅計算歷史價格的平均,LRI 更具預測性與反應靈敏度。
以下程式碼使用 pandas-ta
函式庫計算並繪製線性回歸趨勢線。
import yfinance as yf
import pandas as pd
import mplfinance as mpf
import pandas_ta as ta
# 1. 取得股價資料
start_date = "2020-01-01"
end_date = "2021-01-01"
stock_symbol = "NVDA"
data = yf.download(stock_symbol, start=start_date, end=end_date)
# 2. 使用 pandas-ta 計算線性回歸趨勢 (長度為 50)
linreg = ta.linreg(data["Close"], length=50)
data["LINREG"] = linreg
# 3. 繪製 K 線圖與回歸趨勢線
ap = [
mpf.make_addplot(data["LINREG"], color='red', width=1.5)
]
mpf.plot(data, type='candle', style='yahoo', addplot=ap, title=f"{stock_symbol} with Linear Regression Trend", volume=True, figsize=(15,10))